package com.tiantian.subject.mapper;

import com.tiantian.subject.domain.entity.Subject;
import com.tiantian.subject.domain.vo.SubjectVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Set;

/**
 * @author tiantian
 */
@Mapper
public interface SubjectMapper {

    /**
     * 通过ID查询单条数据
     *
     * @param topicId 主键
     * @return 实例对象
     */
    Subject selectById(String topicId);

    /**
     * 通过实体作为筛选条件查询
     *
     * @param Subject 实例对象
     * @return 对象列表
     */
    List<Subject> selectList(Subject Subject);

    /**
     * 获取sysTopicVO列表
     *
     * @param Subject 查询参数
     */
    List<SubjectVo> selectTopicVOList(Subject Subject);

    /**
     * 新增数据
     *
     * @param Subject 实例对象
     * @return 影响行数
     */
    Boolean insertBatch(Subject Subject);

    /**
     * 修改数据
     *
     * @param Subject 实例对象
     * @return 影响行数
     */
    Boolean updateById(Subject Subject);

    /**
     * 逻辑删除
     */
    Boolean logicalDeleteById(@Param("topicId") String topicId, @Param("userId") Long userId);

    /**
     * 物理删除
     */
    Boolean deleteById(@Param("topicId") String topicId, @Param("userId") Long userId);

    /**
     * 获取题目总条数
     */
    int selectSubjectTotal();

    /**
     * 检查序号是否已被使用
     */
    int checkOrderUnique(Integer order);

    /**
     * 获取序号使用情况
     */
    Set<Integer> getUsedOrders();

    /**
     * 获取回收站内容
     */
    List<SubjectVo> selectRecycleBin(Subject subject);

    /**
     * 检查题目是否存在
     */
    int checkSubjectExist(String topicId);

    /**
     * 恢复题目
     */
    int recoverSubject(@Param("topicId") String topicId, @Param("order") Integer order, @Param("userId") Long userId);
}


